package com.xique.door.device.freeview.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import com.xique.common.core.utils.DateUtils;
import com.xique.door.util.RedisUtil;
import com.xique.door.device.freeview.bean.dto.UserCommandStatusDto;
import com.xique.door.device.freeview.constant.CommandStatus;
import com.xique.door.device.freeview.constant.FreeViewConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Auther: caogangquan
 * @Date: 2021/11/9 22:04
 * @Description:
 */
@Component
@Slf4j
public class FreeviewRedisUtil {

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 保存 customId记录下发状态
     * @param isSave 是否需要保存（删除操作不需要保存）
     * @param className
     * @param devCode
     * @param customId
     * @param status
     * @param msg
     */
    public void saveCustomIdStatus(boolean isSave,String className, String devCode,String customId,String status,String msg){
        if(isSave){
            JSONObject jsonObject = new JSONObject(4);
            jsonObject.put("device_code",devCode);
            jsonObject.put("status",status);
            jsonObject.put("msg",msg);
            jsonObject.put("time", DateUtils.getTime());
            redisUtil.set(FreeViewConstant.REDIS_FACE_REC_STATUS_PREFIX + devCode + ":" + className + ":" + customId, jsonObject);
        }

    }


    /**
     * 批量保存人脸门禁相关实体记录下发的状态 CustomId
     * 永久保存
     * @param devCode
     * @param
     * @param
     */
    public void saveBatchCustomIdStatus(String className, String devCode, List<UserCommandStatusDto> dtos){
        Map<String, String> map = new HashMap<>();
        if(!CollectionUtils.isEmpty(dtos)){
            for (UserCommandStatusDto dto : dtos) {
                JSONObject jsonObject = new JSONObject(3);
                jsonObject.put("device_code",devCode);
                jsonObject.put("status",dto.getStatus());
                jsonObject.put("msg",dto.getMsg());
                jsonObject.put("time",DateUtils.getTime());
                map.put(FreeViewConstant.REDIS_FACE_REC_STATUS_PREFIX + devCode + ":" + className + ":" + dto.getCustomerId(),jsonObject.toJSONString());
            }
            redisUtil.batchInsertByPipelined(map);
        }
    }

    /**
     * 获取customId命令下发的状态
     * @param devCode
     * @param customId
     * @return
     */
    public JSONObject getCustomIdStatus(String className, String devCode,String customId){
        Object obj = redisUtil.get(FreeViewConstant.REDIS_FACE_REC_STATUS_PREFIX + devCode + ":" + className + ":" + customId);
        if(null != obj){
            return JSONObject.parseObject(JSON.toJSONString(obj));
        }else{
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("device_code",devCode);
            jsonObject.put("status", CommandStatus.UNKNOWN);
            jsonObject.put("msg", "命令下发状态未知");
            return jsonObject;
        }
    }

    /**
     * 批量获取多条记录的多个设备的命令下发状态 CustomId
     * 1、根据列表拼接key；
     * 2、根据key在redis中批量查询
     * @return
     */
    public Object getBatchCustomIdStatus(List<String> keys){
        Object obj = redisUtil.batchSelect(keys);
        return obj;
    }

    /**
     * 删除customId命令下发状态
     * @param className
     * @param devCode
     * @param customId
     */
    public void delCustomIdStatus(String className, String devCode,String customId){
        redisUtil.del(FreeViewConstant.REDIS_FACE_REC_STATUS_PREFIX + devCode + ":" + className + ":" + customId);
    }

}
